home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1998 April: Mac OS SDK / Dev.CD Apr 98 SDK1.toast / Development Kits (Disc 1) / Interfaces&Libraries / Universal / Interfaces / PInterfaces / Start.p < prev    next >
Encoding:
Text File  |  1998-02-12  |  10.7 KB  |  318 lines  |  [TEXT/MPS ]

  1. {
  2.      File:        Start.p
  3.  
  4.      Contains:    Start Manager Interfaces.
  5.  
  6.      Version:    Technology:    System 7.5
  7.                  Release:    Universal Interfaces 3.1
  8.  
  9.      Copyright:    © 1987-1993, 1996-1998 by Apple Computer, Inc., all rights reserved
  10.  
  11.      Bugs?:        Please include the the file and version information (from above) with
  12.                  the problem description.  Developers belonging to one of the Apple
  13.                  developer programs can submit bug reports to:
  14.  
  15.                      devsupport@apple.com
  16.  
  17. }
  18. {$IFC UNDEFINED UsingIncludes}
  19. {$SETC UsingIncludes := 0}
  20. {$ENDC}
  21.  
  22. {$IFC NOT UsingIncludes}
  23.  UNIT Start;
  24.  INTERFACE
  25. {$ENDC}
  26.  
  27. {$IFC UNDEFINED __START__}
  28. {$SETC __START__ := 1}
  29.  
  30. {$I+}
  31. {$SETC StartIncludes := UsingIncludes}
  32. {$SETC UsingIncludes := 1}
  33.  
  34. {$IFC UNDEFINED __MACTYPES__}
  35. {$I MacTypes.p}
  36. {$ENDC}
  37. {$IFC UNDEFINED __FILES__}
  38. {$I Files.p}
  39. {$ENDC}
  40.  
  41.  
  42. {$PUSH}
  43. {$ALIGN MAC68K}
  44. {$LibExport+}
  45.  
  46. {
  47.     Important: When the major version number of kExtensionTableVersion and the value
  48.     returned by gestaltExtensionTableVersion change, it indicates that the Extension
  49.     Table startup mechanism has radically changed and code that doesn't know about
  50.     the new major version must not attempt to use the Extension Table startup
  51.     mechanism.
  52.     
  53.     Changes to the minor version number of kExtensionTableVersion indicate that the
  54.     definition of the ExtensionElement structure has been extended, but the fields
  55.     defined for previous minor versions of kExtensionTableVersion have not changed.
  56. }
  57.  
  58. CONST
  59.     kExtensionTableVersion        = $00000100;                    {  current ExtensionTable version (1.0.0)  }
  60.  
  61. { ExtensionNotification message codes }
  62.     extNotificationBeforeFirst    = 0;                            {  Before any extensions have loaded  }
  63.     extNotificationAfterLast    = 1;                            {  After all extensions have loaded  }
  64.     extNotificationBeforeCurrent = 2;                            {  Before extension at extElementIndex is loaded  }
  65.     extNotificationAfterCurrent    = 3;                            {  After extension at extElementIndex is loaded  }
  66.  
  67.  
  68. TYPE
  69.     ExtensionElementPtr = ^ExtensionElement;
  70.     ExtensionElement = RECORD
  71.         fileName:                Str31;                                    {  The file name  }
  72.         parentDirID:            LONGINT;                                {  the file's parent directory ID  }
  73.                                                                         {  and everything after ioNamePtr in the HParamBlockRec.fileParam variant  }
  74.         ioVRefNum:                INTEGER;                                {  always the real volume reference number (not a drive, default, or working dirID)  }
  75.         ioFRefNum:                INTEGER;
  76.         ioFVersNum:                SInt8;
  77.         filler1:                SInt8;
  78.         ioFDirIndex:            INTEGER;                                {  always 0 in table  }
  79.         ioFlAttrib:                SInt8;
  80.         ioFlVersNum:            SInt8;
  81.         ioFlFndrInfo:            FInfo;
  82.         ioDirID:                LONGINT;
  83.         ioFlStBlk:                UInt16;
  84.         ioFlLgLen:                LONGINT;
  85.         ioFlPyLen:                LONGINT;
  86.         ioFlRStBlk:                UInt16;
  87.         ioFlRLgLen:                LONGINT;
  88.         ioFlRPyLen:                LONGINT;
  89.         ioFlCrDat:                UInt32;
  90.         ioFlMdDat:                UInt32;
  91.     END;
  92.  
  93.     ExtensionTableHeaderPtr = ^ExtensionTableHeader;
  94.     ExtensionTableHeader = RECORD
  95.         extTableHeaderSize:        UInt32;                                    {  size of ExtensionTable header ( equal to offsetof(ExtensionTable, extElements[0]) )  }
  96.         extTableVersion:        UInt32;                                    {  current ExtensionTable version (same as returned by gestaltExtTableVersion Gestalt selector)  }
  97.         extElementIndex:        UInt32;                                    {  current index into ExtensionElement records (zero-based)  }
  98.         extElementSize:            UInt32;                                    {  size of ExtensionElement  }
  99.         extElementCount:        UInt32;                                    {  number of ExtensionElement records in table (1-based)  }
  100.     END;
  101.  
  102.     ExtensionTablePtr = ^ExtensionTable;
  103.     ExtensionTable = RECORD
  104.         extTableHeader:            ExtensionTableHeader;                    {  the ExtensionTableHeader  }
  105.         extElements:            ARRAY [0..0] OF ExtensionElement;        {  one element for each extension to load  }
  106.     END;
  107.  
  108.     ExtensionTableHandle                = ^ExtensionTablePtr;
  109. {$IFC TYPED_FUNCTION_POINTERS}
  110.     ExtensionNotificationProcPtr = PROCEDURE(message: UInt32; param: UNIV Ptr; extElement: ExtensionElementPtr);
  111. {$ELSEC}
  112.     ExtensionNotificationProcPtr = ProcPtr;
  113. {$ENDC}
  114.  
  115. {$IFC TYPED_FUNCTION_POINTERS}
  116.     ExtensionTableHandlerProcPtr = PROCEDURE(message: UInt32; param: UNIV Ptr; extTableHandle: ExtensionTableHandle);
  117. {$ELSEC}
  118.     ExtensionTableHandlerProcPtr = ProcPtr;
  119. {$ENDC}
  120.  
  121.     ExtensionNotificationUPP = UniversalProcPtr;
  122.     ExtensionTableHandlerUPP = UniversalProcPtr;
  123.  
  124. CONST
  125.     uppExtensionNotificationProcInfo = $00000FC0;
  126.     uppExtensionTableHandlerProcInfo = $00000FC0;
  127.  
  128. FUNCTION NewExtensionNotificationProc(userRoutine: ExtensionNotificationProcPtr): ExtensionNotificationUPP;
  129.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  130.     INLINE $2E9F;
  131.     {$ENDC}
  132.  
  133. FUNCTION NewExtensionTableHandlerProc(userRoutine: ExtensionTableHandlerProcPtr): ExtensionTableHandlerUPP;
  134.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  135.     INLINE $2E9F;
  136.     {$ENDC}
  137.  
  138. PROCEDURE CallExtensionNotificationProc(message: UInt32; param: UNIV Ptr; extElement: ExtensionElementPtr; userRoutine: ExtensionNotificationUPP);
  139.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  140.     INLINE $205F, $4E90;
  141.     {$ENDC}
  142.  
  143. PROCEDURE CallExtensionTableHandlerProc(message: UInt32; param: UNIV Ptr; extTableHandle: ExtensionTableHandle; userRoutine: ExtensionTableHandlerUPP);
  144.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  145.     INLINE $205F, $4E90;
  146.     {$ENDC}
  147.  
  148. TYPE
  149.     DefStartRecPtr = ^DefStartRec;
  150.     DefStartRec = RECORD
  151.         CASE INTEGER OF
  152.         0: (
  153.             sdExtDevID:            SignedByte;
  154.             sdPartition:        SignedByte;
  155.             sdSlotNum:            SignedByte;
  156.             sdSRsrcID:            SignedByte;
  157.            );
  158.         1: (
  159.             sdReserved1:        SignedByte;
  160.             sdReserved2:        SignedByte;
  161.             sdRefNum:            INTEGER;
  162.            );
  163.     END;
  164.  
  165.     DefStartPtr                            = ^DefStartRec;
  166.     DefStartPtrPtr                         = ^DefStartPtr;
  167.     DefVideoRecPtr = ^DefVideoRec;
  168.     DefVideoRec = RECORD
  169.         sdSlot:                    SignedByte;
  170.         sdsResource:            SignedByte;
  171.     END;
  172.  
  173.     DefVideoPtr                            = ^DefVideoRec;
  174.     DefOSRecPtr = ^DefOSRec;
  175.     DefOSRec = RECORD
  176.         sdReserved:                SignedByte;
  177.         sdOSType:                SignedByte;
  178.     END;
  179.  
  180.     DefOSPtr                            = ^DefOSRec;
  181. PROCEDURE GetDefaultStartup(paramBlock: DefStartPtr);
  182.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  183.     INLINE $205F, $A07D;
  184.     {$ENDC}
  185. PROCEDURE SetDefaultStartup(paramBlock: DefStartPtr);
  186.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  187.     INLINE $205F, $A07E;
  188.     {$ENDC}
  189. PROCEDURE GetVideoDefault(paramBlock: DefVideoPtr);
  190.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  191.     INLINE $205F, $A080;
  192.     {$ENDC}
  193. PROCEDURE SetVideoDefault(paramBlock: DefVideoPtr);
  194.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  195.     INLINE $205F, $A081;
  196.     {$ENDC}
  197. PROCEDURE GetOSDefault(paramBlock: DefOSPtr);
  198.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  199.     INLINE $205F, $A084;
  200.     {$ENDC}
  201. PROCEDURE SetOSDefault(paramBlock: DefOSPtr);
  202.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  203.     INLINE $205F, $A083;
  204.     {$ENDC}
  205. PROCEDURE SetTimeout(count: INTEGER);
  206. PROCEDURE GetTimeout(VAR count: INTEGER);
  207. {
  208.     InstallExtensionNotificationProc
  209.  
  210.     Installs an ExtensionNotificationUPP.
  211.  
  212.     Parameters:
  213.         extNotificationProc    The ExtensionNotificationUPP to install.
  214.  
  215.     Results:
  216.         noErr        0        The ExtensionNotificationUPP was installed.
  217.         paramErr    -50        This ExtensionNotificationUPP has already been installed.
  218.         memFullErr    -108    Not enough memory to install the ExtensionNotificationUPP.
  219. }
  220. FUNCTION InstallExtensionNotificationProc(extNotificationProc: ExtensionNotificationUPP): OSErr;
  221.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  222.     INLINE $7000, $AA7D;
  223.     {$ENDC}
  224.  
  225. {
  226.     RemoveExtensionNotificationProc
  227.  
  228.     Removes an ExtensionNotificationUPP.
  229.     
  230.     Note:    ExtensionNotificationUPPs can't call RemoveExtensionNotificationProc.
  231.  
  232.     Parameters:
  233.         extNotificationProc    The ExtensionNotificationUPP to remove.
  234.  
  235.     Results:
  236.         noErr        0        The ExtensionNotificationUPP was removed.
  237.         paramErr    -50        The ExtensionNotificationUPP was not found, or
  238.                             RemoveExtensionNotificationProc was called from within
  239.                             a ExtensionNotificationUPP (ExtensionNotificationUPPs can't
  240.                             call RemoveExtensionNotificationProc).
  241. }
  242. FUNCTION RemoveExtensionNotificationProc(extNotificationProc: ExtensionNotificationUPP): OSErr;
  243.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  244.     INLINE $7001, $AA7D;
  245.     {$ENDC}
  246.  
  247. {
  248.     InstallExtensionTableHandlerProc
  249.  
  250.     Installs an ExtensionTableHandlerUPP. Control is taken away from the system's default
  251.     handler and the ExtensionTableHandlerUPP is responsible for all changes to the
  252.     ExtensionTable (except for incrementing extElementIndex between extensions). This is
  253.     always the first handler called with extNotificationBeforeFirst and
  254.     extNotificationBeforeCurrent messages and the last handler called with
  255.     extNotificationAfterLast and extNotificationAfterCurrent messages. extElementIndex
  256.     is always incremented immediately after the ExtensionTableHandlerUPP is called with
  257.     the extNotificationAfterCurrent message.
  258.     
  259.     There can only be one ExtensionTableHandler installed.
  260.     
  261.     Warning:    The only safe time to change what ExtensionElement is at
  262.                 ExtensionTable.extElements[extElementIndex] is when your
  263.                 ExtensionTableHandlerUPP is called with the extNotificationAfterCurrent
  264.                 message. You may change the ExtensionTable or the extElementIndex at other
  265.                 times, but you must ensure that the ExtensionElement at
  266.                 ExtensionTable.extElements[extElementIndex] stays the same.
  267.                 
  268.     Note:        If the ExtensionTable or the contents of the folders included in the
  269.                 ExtensionTable are changed after installing an ExtensionTableHandler,
  270.                 RemoveExtensionTableHandlerProc cannot be called.
  271.  
  272.     Parameters:
  273.         extMgrProc            The ExtensionTableHandlerUPP to install.
  274.         extTable            A pointer to an ExtensionTableHandle where
  275.                             InstallExtensionTableHandlerProc will return the current
  276.                             ExtensionTableHandle. You don't own the handle itself and
  277.                             must not dispose of it, but you can change the extElementIndex.
  278.                             the extElementCount, and the ExtensionElements in the table.
  279.  
  280.     Results:
  281.         noErr        0        The ExtensionTableHandlerUPP was installed.
  282.         paramErr    -50        Another ExtensionTableHandlerUPP has already been installed.
  283.         memFullErr    -108    Not enough memory to install the ExtensionTableHandlerUPP.
  284. }
  285. FUNCTION InstallExtensionTableHandlerProc(extMgrProc: ExtensionTableHandlerUPP; VAR extTable: ExtensionTableHandle): OSErr;
  286.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  287.     INLINE $7002, $AA7D;
  288.     {$ENDC}
  289.  
  290. {
  291.     RemoveExtensionTableHandlerProc
  292.  
  293.     Remove an ExtensionTableUPP. Control is passed back to the default handler.
  294.  
  295.     Parameters:
  296.         extMgrProc            The ExtensionTableUPP to remove.
  297.  
  298.     Results:
  299.         noErr        0        The ExtensionTableUPP was removed.
  300.         paramErr    -50        This ExtensionTableUPP was not installed,
  301.                             or the ExtensionTable no longer matches the
  302.                             original boot ExtensionTable.
  303. }
  304. FUNCTION RemoveExtensionTableHandlerProc(extMgrProc: ExtensionTableHandlerUPP): OSErr;
  305.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  306.     INLINE $7003, $AA7D;
  307.     {$ENDC}
  308. {$ALIGN RESET}
  309. {$POP}
  310.  
  311. {$SETC UsingIncludes := StartIncludes}
  312.  
  313. {$ENDC} {__START__}
  314.  
  315. {$IFC NOT UsingIncludes}
  316.  END.
  317. {$ENDC}
  318.